/*!
 * Copyright (C) 2020 - All Rights Reserved by
 * @author : ZhaoYanbo
 * @email  : zyb920@hotmail.com
 * @created: 2020-10-31
 * @version: 1.0.0.0
 *
 */

#ifndef CSCAN_H
#define CSCAN_H

#include <QThread>
#include <mutex>

class QTimer;

class CScan : public QThread
{
    Q_OBJECT
public:
    explicit CScan(QObject *parent = nullptr);
    ~CScan() override;

    /*!
     * \brief 异步扫描单个目录
     * \param dir: 单个目录的路径 注意:路径必须是/结尾的
     */
    Q_INVOKABLE void scan(const QString &dir);

    /*!
     * \brief 异步扫描多个目录
     * \param dirs: 多个目录的路径
     */
    Q_INVOKABLE void scan(const QStringList &dirs);

    /*!
     * \brief 获取扫描到的结果
     * \return QStringList
     */
    QStringList files() const;

    /*!
     * \brief 扫描指定路径, 然后获取扫描到的结果
     * \param path:扫描路径
     * \param filters: 后缀过滤
     * \return QStringList
     */
    QStringList getFiles(const QString &path, const QStringList &filters);

    void getFiles(const QString &path, const QStringList &filters, QStringList &list);

    /*!
     * \brief 停止扫描
     */
    Q_INVOKABLE void stop();

    /*!
     * \brief 清空资源
     */
    Q_INVOKABLE void clear();

    Q_INVOKABLE int length() const;

protected:
    void run() override;

private:
    std::mutex m_mutex;

    /*!
     * \brief 需要扫描的目录
     */
    QStringList m_dirs; //

    /*!
     * \brief 扫描获取到的文件列表
     */
    QStringList m_files;//

    /*!
     * \brief 过滤器
     */
    QStringList m_filters;
};

#endif // CSCAN_H
